import os, time, datetime
import ftplib

from log import Log
from dados import Dados
from processamento import Processamento


class Ftp_tls:
	def __init__(self, servidor, path, id, usuario, senha):

		self.log   = Log()
		self.dados = Dados()
		self.log.update('iniciando busca Ftp...\n')
		i=0
		idade=60 #1 minutos sem modificaca
	
		# Conectando ao servidor de ftp
		ftp = ftplib.FTP_TLS()
		ftp.connect(servidor)
		ftp.login(usuario, senha)
		ftp.prot_p() 
		ls = []
		ftp.cwd(path)
		ftp.dir(ls.append)

		# Varrendo os arquivos encontrados
		for f in ls:
			#print f
			if(self.getIdade(f, idade) == False):
				continue
			# Setando dados de processamento para os arquivos encontrados
			if(i==0):
				self.proc = Processamento()
				self.proc.lockProcessamento(id)
				path=self.proc.getPath()
				os.chdir(path)
			i+=1
			# Baixando para o path de processamento	
			self.log.update("[" + str(id) + "] Baixando arquivo=" + self.arquivo + " para path=" + path + "\n")
			ftp.retrbinary('RETR %s' % self.arquivo, open(self.arquivo, 'wb').write)
			ftp.delete(self.arquivo)


		ftp.quit()

	def getIdade(self, f, i):
		d=f.split(' ')
		t=len(d)

		# Ignora linhas 3 iniciais se existirem
		if(d[0] == 'total'):
			return False
		if(d[t-1] == '.'):
			return False
		if(d[t-1] == '..'):
			return False
		# Extrai os dados do arquivo independente do servidor de ftp
		d=self.parseFtpFileInfo(f)
		# Atribui os dados extraidos
		self.arquivo=d[8]
		self.tamanho=d[4]
		modificacao=time.strptime('2013-' + d[5]+ '-' + d[6] + ' ' + d[7] + ':00', "%Y-%b-%d %H:%M:%S")
		#print "mod:" + str(modificacao) + " - arq:" + self.arquivo + " - tam:" + tamanho
		# Verificando a idade do arquivo convertendo para o formato timestamp
		modificacao=time.mktime(modificacao)
		agora=time.time()
		#print "mod=" + str(modificacao) + " - agora=" + str(agora) + " - dif=" + str(int(agora - modificacao))
		if(int(agora - modificacao) <i):
			return False
		else:
			return True

	# Sempre devolve 9 elementos
	# 1 - permissoes
	# 3 - usuario
	# 4 - grupo  
	# 5 - tamanho
	# 6 - mes
	# 7 - dia
	# 8 - hora
	# 9 - nome
	def parseFtpFileInfo(self, f):
		d=f.split(' ')
		dado=[]

		for s in d:
			if(s == ''):
				continue
			else:
				dado.append(s)
		return dado
